#ifndef GEN_MIPS_H
#define GEN_MIPS_H

	#include <stdio.h>
	#include <stdlib.h>
	#include <string.h>
	#include "tableGencode.h"
	#include "../tableSymbole/hashTable.h"
	
	#define GENMIPS_VARIABLE_NBDECLARATIONMAX 256
	#define GENMIPS_TAILLEMAXPILE 512
	
	char * varaibleADeclarer[GENMIPS_VARIABLE_NBDECLARATIONMAX];
	int nbVariableADeclarer;
	
	char * pourGestionPile[GENMIPS_TAILLEMAXPILE];
	int nbPourGestionPile;
	int pointeurPourGestionPile;
	int maxPointeurPourGestionPile;
	
	//initialisation des varaibles à déclarer
	void initVariableADeclarer();
	//ajout d'une variable a déclarer
	void ajoutVariableADeclarer(entree element);
	
	//initialisation de la pseudo pile pour la gestion de la pile mips
	void initPourGestionPile();
	//ajout d'une variable dans la pile
	int ajoutPourGestionPile(char * nom);
	//suppression de la tete de la pile
	void suppressionPourGestionPile();
	//ajout d'un marqueur de séparation en tete de pile
	void marquerPourGestionPile();
	//suppression d'un marqueur en tete de pile
	void suppressionMarqueurPourGestionPile();
	
	//va générer le code mips
	void mipsGeneration(FILE * out);
	
	//va générer la partie data (déclaration des variables)
	void dataGeneration (FILE * out);
	
	//va générer la partie text (code)
	void textGeneration (FILE * out);
	//va générer une instruction addition
	void codeAdditionGeneration (FILE * out, int indexGenMips);
	//va générer une instruction multiplication
	void codeMultiplicationGeneration (FILE * out, int indexGenMips);
	//va générer une instruction affectation
	void codeAffectationGeneration (FILE * out, int indexGenMips);
	//va générer une instruction affectation valeur
	void codeAffectationValGeneration (FILE * out, int indexGenMips);
	//va générer une instruction ecriture
	void codeEcritureGeneration (FILE * out, int indexGenMips);
	//va générer une instruction ecriture valeur
	void codeEcritureValGeneration (FILE * out, int indexGenMips);
	//va générer une instruction d'empilement
	void codeChargeDanslaPileGeneration (FILE * out, int indexGenMips);
	//va générer une instruction de dépilement
	void codeChargeDeLaPileGeneration (FILE * out, int indexGenMips);
	
	
#endif
